<?php

define('IS_CLI',PHP_SAPI === 'cli');

set_time_limit(0);

define('ROOT',str_replace('\\','/',substr(dirname(__FILE__),0)));



include ROOT.'/Lib/Record.class.php';

/**
 * 自动注册
 */
spl_autoload_register(function ($class) {
    $file = ROOT . '/' . str_replace('\\', '/', $class);
    $file .= '.class.php';
    //下面这行用来记录尝试加载的类文件数,调试时可能用到
    //Lib\Record::add('TRY_INCLUDE_FILES',$file);
    if (file_exists($file)) {
        include_once $file;
    }
});




$configs =include ROOT.'/config.php';

C($configs);


/**
 * 打印友好
 * @param  mixed $obj 要打印的对象
 * @return viod
 */
function p($obj,$sql=false)
{
	echo "\r\n".'<pre>'."\r\n".print_r($obj,true)."\r\n".'</pre>'."\r\n".($sql?M('')->_sql():'');
}


/**
 * 实例化一个没有模型文件的Model
 * @param string $name Model名称 支持指定基础模型 例如 MongoModel:User
 * @param string $tablePrefix 表前缀
 * @param mixed $connection 数据库连接信息
 * @return Think\Model
 */
function M($name='', $tablePrefix='',$connection='') {
    static $_model  = array();

    if(strpos($name,':')) {
        list($class,$name)    =  explode(':',$name);
    }else{
        $class      =   'Lib\\Model';
    }
    $pre=C('MYSQL_SERVER');

    $guid           =   (is_array($connection)?implode('',$connection):$connection).$tablePrefix . $name;

    if (!isset($_model[$guid])){
        $_model[$guid] = new $class($name,$tablePrefix,$connection);
    }

    return $_model[$guid];
}

function Model($name='')
{
	if(empty($name)) return M();
    static $_model  =   array();

    $class          =   'Model\\'.basename($name).'Model';

    if(class_exists($class)) {
    	$cfg=C('MYSQL_SERVER');
        $model      =   new $class(basename($name),$cfg['DB_PREFIX']);
    }else {

        $model      =   M(basename($name));
    }

    $_model[$name]  =  $model;

    return $model;
}

/**
 * 字符串命名风格转换
 * type 0 将Java风格转换为C的风格 1 将C风格转换为Java的风格
 * @param string $name 字符串
 * @param integer $type 转换类型
 * @return string
 */
function parse_name($name, $type=0) {
    if ($type) {
        return ucfirst(preg_replace("/_([a-zA-Z])/e", "strtoupper('\\1')", $name));
    } else {
        return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));
    }
}


/**
 * 获取和设置配置参数 支持批量定义
 * @param string|array $name 配置变量
 * @param mixed $value 配置值
 * @param mixed $default 默认值
 * @return mixed
 */
function C($name=null, $value=null,$default=null) {
    static $_config = array();
    // 无参数时获取所有
    if (empty($name)) {
        return $_config;
    }
    // 优先执行设置获取或赋值
    if (is_string($name)) {
        if (!strpos($name, '.')) {
            $name = strtoupper($name);
            if (is_null($value))
                return isset($_config[$name]) ? $_config[$name] : $default;
            $_config[$name] = $value;
            return null;
        }
        // 二维数组设置和获取支持
        $name = explode('.', $name);
        $name[0]   =  strtoupper($name[0]);
        if (is_null($value))
            return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : $default;
        $_config[$name[0]][$name[1]] = $value;
        return null;
    }
    // 批量设置
    if (is_array($name)){
        $_config = array_merge($_config, array_change_key_case($name,CASE_UPPER));
        return null;
    }
    return null; // 避免非法参数
}


function E($msg, $code=0) {
    throw new Exception($msg, $code);
}

function console($value='')
{   
    
    echo $value.(IS_CLI?"\r\n":'<br/>');
    ob_end_flush();
    ob_flush();
    flush();
}

